From: Alexander Larsson Date: Fri, 3 Feb 2012 14:50:49 +0000 (+0100) Subject: Support a gtk.gresource file in themes X-Git-Tag: archive/raspbian/3.24.39-1+rpi1~1^2~65^2~39^2~18174 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success/%22http:/www.example.com/cgi/success?a=commitdiff_plain;h=57386285fa23db6879efaccd2cfa7ed501b6056f;p=gtk%2B3.0.git Support a gtk.gresource file in themes This lets themes install a .gresource for efficient loading of resources. This resource file will (if it exists) be automatically loaded (mmaped) when the theme is used and unloaded when not used. --- diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c index dbbf92a00b..e499db5d94 100644 --- a/gtk/gtkcssprovider.c +++ b/gtk/gtkcssprovider.c @@ -985,6 +985,7 @@ struct _GtkCssProviderPrivate GHashTable *symbolic_colors; GArray *rulesets; + GResource *resource; }; enum { @@ -1591,6 +1592,13 @@ gtk_css_provider_finalize (GObject *object) if (priv->symbolic_colors) g_hash_table_destroy (priv->symbolic_colors); + if (priv->resource) + { + g_resources_unregister (priv->resource); + g_resource_unref (priv->resource); + priv->resource = NULL; + } + G_OBJECT_CLASS (gtk_css_provider_parent_class)->finalize (object); } @@ -2901,8 +2909,20 @@ gtk_css_provider_get_named (const gchar *name, if (path) { + char *dir, *resource_file; + GResource *resource; + provider = gtk_css_provider_new (); + dir = g_path_get_dirname (path); + resource_file = g_build_filename (dir, "gtk.gresource", NULL); + resource = g_resource_load (resource_file, NULL); + if (resource != NULL) + { + provider->priv->resource = resource; + g_resources_register (resource); + } + if (!gtk_css_provider_load_from_path (provider, path, NULL)) { g_object_unref (provider);